package fiuba.algo3.control;

import java.io.IOException;

import fiuba.algo3.modelo.Dificultad;
import fiuba.algo3.modelo.Direccion;
import fiuba.algo3.modelo.Estado;
import fiuba.algo3.modelo.Partida;
import fiuba.algo3.modelo.vehiculo.TipoDeVehiculo;
import fiuba.algo3.usuario.NombreYaUsadoException;
import fiuba.algo3.usuario.Usuario;
import fiuba.algo3.usuario.UsuarioInexistenteException;
import fiuba.algo3.usuario.UsuariosExistentes;

public class Juego {
	private Usuario usuario;
	private Partida partida;
	
	public Juego(Usuario usuario){
		this.usuario = usuario;
	}
	
	public Juego(String nombreDeUsuario) throws IOException{
		UsuariosExistentes usuariosExistentes = new UsuariosExistentes();
		try {
			usuario = usuariosExistentes.nuevoUsuario(nombreDeUsuario);
		} catch (NombreYaUsadoException e) {
			try {
				usuario = usuariosExistentes.getUsuario(nombreDeUsuario);
			} catch (UsuarioInexistenteException e1) {
				/*no se da nunca, se checkea en el try/catch anterior
				 * porque las excepciones son mutuamente excluyentes*/
			}
		}
		
	}
	
	public void nuevaPartida(Dificultad dificultad, TipoDeVehiculo tipoDeVehiculo) throws IOException{
		partida = Partida.nuevaPartidaConPosicionesAleatorias(dificultad, tipoDeVehiculo);
	}
	
	public void setPartidaRecuperada(Partida partidaRecuperada){
		partida = partidaRecuperada;
	}
	
	public Estado moverVehiculoHacia(Direccion direccion){
		return partida.moverVehiculoHacia(direccion);
	}
	
	public Usuario getUsuario(){
		return usuario;
	}
	
	public Partida getPartida(){
		return partida;
	}
}
